package redpack

import (
    "fmt"
	"crypto/tls"
	"wxsdk/wxpay/core"
	. "wxsdk/wxpay"
)

// 查询红包记录
type GetHbInfoReq struct {
	NonceStr     string   `xml:"nonce_str"`  //随机字符串，不长于32位
	Sign         string   `xml:"sign"`       //签名
	MchBillno    string   `xml:"mch_billno"` //商户订单号
	MchId        string   `xml:"mch_id"`     //微信支付分配的商户号
	Appid        string   `xml:"appid"`      //公众账号appid
	BillType     string   `xml:"bill_type"`  //订单类型
}

type GetHbInfoRsp struct {
	BaseResponse         `xml:",innerXml,omitempty"`
	MchBillno     string `xml:"mch_billno"`    // 商户订单号
	DetailId      string `xml:"detail_id"`     // 红包单号
	Status        string `xml:"status"`        // 红包状态
	SendType      string `xml:"send_type"`     // 发放类型
	HbType        string `xml:"hb_type"`       // 红包类型
	TotalNum      string `xml:"total_num"`     // 红包个数
	TotalAmount   string `xml:"total_amount"`  // 红包金额
	Reason        string `xml:"reason"`        // 失败原因
	SendTime      string `xml:"send_time"`     // 红包发送时间
	RefundTime    string `xml:"refund_time"`   // 红包退款时间
	RefundAmount  string `xml:"refund_amount"` // 红包退款金额
	Wishing       string `xml:"wishing"`       // 祝福语
	Remark        string `xml:"remark"`        // 活动描述
	ActName       string `xml:"act_name"`      // 活动名称
	Hblist        string `xml:"hblist"`        // 裂变红包领取列表
	OpenId        string `xml:"openid"`        // 领取红包的Openid
	Amount        string `xml:"amount"`        // 金额
	RcvTime       string `xml:"rcv_time"`      // 接收时间
}

func GetHbInfo(appId,mchId,appSecret,orderId,billType,crt,key string) (GetHbInfoRsp,error){
	var (
	    req = new(GetHbInfoReq)
	    rsp GetHbInfoRsp
	)
	cert, err := tls.X509KeyPair([]byte(crt), []byte(key))
	if err != nil {
		return rsp, err
	}
	tlsConfig := &tls.Config{
		Certificates: []tls.Certificate{cert},
	}
	client := core.GetWxCoPayClient(appSecret,tlsConfig)
	//
	req.Appid = appId
	req.MchId = mchId
	req.MchBillno = orderId
	req.BillType = billType
	serverUrl := fmt.Sprintf("https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo")
	err = client.Excute(serverUrl, req, &rsp, true)
    if err != nil {
		return rsp, err
	}
	return rsp, nil
}
